home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Utilities / Text Processing / Alpha / Tcl / Completions / TclCompletions.tcl < prev    next >
Encoding:
Text File  |  1997-12-05  |  8.3 KB  |  208 lines  |  [TEXT/ALFA]

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  Vince's Additions - an extension package for Alpha
  4.  # 
  5.  #  FILE: "TclCompletions.tcl"
  6.  #                                    created: 31/7/97 {3:01:54 pm} 
  7.  #                                last update: 5/12/97 {5:46:52 pm} 
  8.  #  Author: Vince Darley
  9.  #  E-mail: <darley@fas.harvard.edu>
  10.  #    mail: Division of Engineering and Applied Sciences, Harvard University
  11.  #          Oxford Street, Cambridge MA 02138, USA
  12.  #     www: <http://www.fas.harvard.edu/~darley/>
  13.  #  
  14.  # Copyright (c) 1997  Vince Darley
  15.  # 
  16.  # ###################################################################
  17.  ##
  18.  
  19. ensureset completions(Tcl) {contraction Proc Vvar completion::cmd Ensemble completion::electric Var}
  20. ensureset completions(Shel) {Globalvar Proc completion::cmd Ensemble completion::electric Filename Var}
  21.  
  22. lunion TclTemplates "createNewClass"
  23.  
  24. # ◊◊◊◊ Completions ◊◊◊◊ #
  25.  
  26. proc Tcl::Completion::Globalvar {dummy} {
  27.     set lastword [completion::lastWord]
  28.     if {[string length $lastword] < 3} { return 0 }
  29.     if {[string index $lastword 0] != "\$"} { return 0 }
  30.     set lastword [string range $lastword 1 end]
  31.     set matches [lsort [info globals ${lastword}*]]
  32.     return [completion::matchUtil Tcl::Completion::Globalvar $lastword $matches]
  33. }
  34.  
  35. proc Tcl::Completion::Proc {dummy} {
  36.     set lastword [completion::lastWord p]
  37.     if {[string length $lastword] < 3} { return 0 }
  38.     if {[lookAt [incr p -1]] != "\["} { return 0 }
  39.     set matches [lsort [info commands ${lastword}*]]
  40.     return [completion::matchUtil Tcl::Completion::Proc $lastword $matches]
  41. }
  42.  
  43.  
  44. ## 
  45.  # -------------------------------------------------------------------------
  46.  #   
  47.  #  "Tcl::Completion::Var" --
  48.  #  
  49.  #   A mildly adaptive call of completion::word, in which we realise we 
  50.  #   should complete '$abc...' if we can only see 'abc...'.  The standard
  51.  #   procedure considers '$' to be part of a word so that would otherwise
  52.  #   fail.
  53.  # -------------------------------------------------------------------------
  54.  ##
  55. proc Tcl::Completion::Var {dummy} {
  56.     global __wc__insPos completion_got completion_looking
  57.     
  58.     # cursor changed place?
  59.     set pos [getPos]
  60.     if $pos==$__wc__insPos {
  61.         return [completion::update Tcl::Completion::Var $completion_got $completion_looking]
  62.     }
  63.  
  64.     set lastword [completion::lastWord]
  65.     if { [string index $lastword 0] == "\$" } {
  66.         set completion_got [string range $lastword 1 end]
  67.         set completion_looking $completion_got
  68.         return [completion::update Tcl::Completion::Var $completion_got $completion_looking]
  69.     } else {
  70.         return [completion::update completion::word]
  71.     }
  72. }
  73.  
  74. ## 
  75.  # -------------------------------------------------------------------------
  76.  # 
  77.  # "Tcl::Completion::Vvar" --
  78.  # 
  79.  #  Try to complete a variable, provided it seems to be a variable name.
  80.  #  This means it is preceded by '$' or by 'set ' or 'arrayname(',...
  81.  #  
  82.  #  This allows us to complete variable names which begin 'str', 'li'
  83.  #  etc. preferentially, since they would otherwise be expanded into
  84.  #  'string', 'lindex' etc before they had a chance to be completed
  85.  #  as variables.
  86.  # -------------------------------------------------------------------------
  87.  ##
  88. proc Tcl::Completion::Vvar {dummy} {
  89.     global completion_got completion_looking
  90.     set lastword [completion::lastTwoWords prev]
  91.     if { [string index $lastword 0] == "\$" } {
  92.         set completion_got [string range $lastword 1 end]
  93.         set completion_looking $completion_got
  94.         return [completion::update Tcl::Completion::Vvar $completion_got $completion_looking]
  95.     } elseif {[regexp {\($} $prev] \
  96.       || ([regexp {^(set|global|variable|get)[ \t]+$} $prev])} {
  97.         return [completion::update completion::word]
  98.     } else {
  99.         return 0
  100.     }
  101. }
  102.  
  103. set Tclstringcmds { 
  104.     compare first index last length match range tolower toupper trim 
  105.     trimleft trimright wordend wordstart
  106. }
  107. set Tclfilecmds { 
  108.     atime copy delete dirname executable exists extension isdirectory 
  109.     isfile join lstat mtime mkdir owned pathtype readable readlink rename 
  110.     root rootname size split stat tail type writable
  111. }
  112. set Tcltracecmds {
  113.     variable vdelete vinfo
  114. }
  115.  
  116. set "Tclelectrics(trace variable)" " •name• •ops• •command•"
  117. set "Tclelectrics(trace vdelete)" " •name• •ops• •command•"
  118. set "Tclelectrics(trace vinfo)" " •name•"
  119. set "Tclelectrics(string compare)" " •is-bigger• •compared-with•"
  120. set "Tclelectrics(string first)" " •search-for• •search-in•"
  121. set "Tclelectrics(string index)" " •string• •charIndex•"
  122. set "Tclelectrics(string last)" " •search-for• •search-in•"
  123. set "Tclelectrics(string length)" " •string•"
  124. set "Tclelectrics(string match)" " •pattern• •string•"
  125. set "Tclelectrics(string range)" " •string• •first• •last•"
  126. set "Tclelectrics(string tolower)" " •string•"
  127. set "Tclelectrics(string toupper)" " •string•"
  128. set "Tclelectrics(string trim)" " •string• •?chars?•"
  129. set "Tclelectrics(string trimleft)" " •string• •?chars?•"
  130. set "Tclelectrics(string trimright)" " •string• •?chars?•"
  131. set "Tclelectrics(string wordend)" " •string• •index•"
  132. set "Tclelectrics(string wordstart)" " •string• •index•"
  133. set "Tclelectrics(file atime)" " •name•"
  134. set "Tclelectrics(file copy)" " •-force?• •source...source• •target•"
  135. set "Tclelectrics(file delete)" " •name•"
  136. set "Tclelectrics(file dirname)" " •name•"
  137. set "Tclelectrics(file executable)" " •name•"
  138. set "Tclelectrics(file exists)" " •name•"
  139. set "Tclelectrics(file extension)" " •name•"
  140. set "Tclelectrics(file isdirectory)" " •name•"
  141. set "Tclelectrics(file isfile)" " •name•"
  142. set "Tclelectrics(file join)" " •name• •name ... name•"
  143. set "Tclelectrics(file lstat)" " •name• •varName•"
  144. set "Tclelectrics(file mkdir)" " •name•"
  145. set "Tclelectrics(file mtime)" " •name•"
  146. set "Tclelectrics(file owned)" " •name•"
  147. set "Tclelectrics(file readable)" " •name•"
  148. set "Tclelectrics(file readlink)" " •name•"
  149. set "Tclelectrics(file root)" " •name•"
  150. set "Tclelectrics(file rootname)" " •name•"
  151. set "Tclelectrics(file size)" " •name•"
  152. set "Tclelectrics(file split)" " •name•"
  153. set "Tclelectrics(file stat)" " •name• •varName•"
  154. set "Tclelectrics(file tail)" " •name•"
  155. set "Tclelectrics(file type)" " •name•"
  156. set "Tclelectrics(file writable)" " •name•"
  157.  
  158. set Tclelectrics(for) " \{•start•\} \{•test•\} \{•increment•\} \{\r\t•body•\r\}\r••"
  159. set Tclelectrics(while) " \{•test•\} \{\r\t•body•\r\}\r••"
  160. set Tclelectrics(if) " \{•test•\} \{\r\t•true body•\r\} ••"
  161. set Tclelectrics(elseif) " \{•test•\} \{\n\t•true body•\n\} ••"
  162. set Tclelectrics(else) " \{\n\t•else body•\n\} ••"
  163. set Tclelectrics(proc) " •name• \{•args•\} \{\n\t•body•\n\}"
  164. set Tclelectrics(switch) " \{••\} \{\n…\"••\" \{\n\t••\n…\}\n\}\n••"
  165. set Tclelectrics(lindex) " •list• •element•"
  166. set Tclelectrics(lrange) " •list• •first• •last•"
  167. set Tclelectrics(lsearch) " •?switches?• •list• •pattern•"
  168. set Tclelectrics(regsub) " •?switches?• •exp• •string• •subSpec• •varName•"
  169. set Tclelectrics(regexp) " •?switches?• •exp• •string• •?matchVars...?•"
  170. set Tclelectrics(upvar) " •?level?• •varName• •localVar•"
  171. set Tclelectrics(lreplace) " •list• •first• •last• •?element element ...?•"
  172. set Tclelectrics(linsert) " •list• •index• •element• •?element element ...?•"
  173. set Tclelectrics(lappend) " •varName• •value• •?value value ...?•"
  174. set Tclelectrics(scan) " •string• •format• •varName• •?varName ...?•"
  175.  
  176. # ◊◊◊◊ ..Tclelectrics --contractions ◊◊◊◊ #
  177. # these make use of indirection
  178. set Tclelectrics(s'c) "◊»string compare"
  179. set Tclelectrics(s'f) "◊»string first"
  180. set Tclelectrics(s'i) "◊»string index"
  181. set Tclelectrics(s'l) "◊»string last"
  182. set Tclelectrics(s'len) "◊»string length"
  183. set Tclelectrics(s'r) "◊»string range"
  184. set Tclelectrics(s'tol) "◊»string tolower"
  185. set Tclelectrics(s'tou) "◊»string toupper"
  186. set Tclelectrics(s't) "◊»string trim"
  187. set Tclelectrics(s'tl) "◊»string trimleft"
  188. set Tclelectrics(s'tr) "◊»string trimright"
  189. set Tclelectrics(f'a) "◊»file atime"
  190. set Tclelectrics(f'd) "◊»file dirname"
  191. set Tclelectrics(f'exe) "◊»file executable"
  192. set Tclelectrics(f'exi) "◊»file exists"
  193. set Tclelectrics(f'ext) "◊»file extension"
  194. set Tclelectrics(f'id) "◊»file isdirectory"
  195. set Tclelectrics(f'if) "◊»file isfile"
  196. set Tclelectrics(f'l) "◊»file lstat"
  197. set Tclelectrics(f'm) "◊»file mtime"
  198. set Tclelectrics(f'o) "◊»file owned"
  199. set Tclelectrics(f'r) "◊»file readable"
  200. set Tclelectrics(f'r) "◊»file readlink"
  201. set Tclelectrics(f'rn) "◊»file rootname"
  202. set Tclelectrics(f'size) "◊»file size"
  203. set Tclelectrics(f'stat) "◊»file stat"
  204. set Tclelectrics(f'tail) "◊»file tail"
  205. set Tclelectrics(f'type) "◊»file type"
  206. set Tclelectrics(f'w) "◊»file writable"
  207.  
  208.